/**
 * Copyright(c) 2015 BASUNG Techonologies Co., Ltd.
 * <p/>
 * History:
 * 15/8/28 下午5:23 Created by leijinghan
 */
package com.jade.bss.db;

import com.jade.bss.DbException;
import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * Explain: dao层公共接口
 *
 * @author <a href="mailto:jinghan.lei@basung.com">leijinghan</a>
 * @date 15/8/28 下午5:23
 * @version 1.0
 */
public interface IBaseDao<M extends java.io.Serializable, PK extends java.io.Serializable>
{
    /**
     * 增加方法 - 通用
     * @param model 通用对象模型
     * @throws DbException
     */
    void add(M model) throws DbException;

    /**
     * 更新方法 － 通用
     * @param model 通用对象模型
     * @throws DbException
     */
    void update(M model) throws DbException;

    /**
     * 删除指定对象 － 通用
     * @param model 通用对象模型
     * @throws DbException
     */
    void delete(M model) throws DbException;

    /**
     * 根据id查找指定对象
     * @param model 通用对象模型
     * @param id 指定的id
     * @return 通用对象
     */
    M get(Class<M> model, PK id);

    /**
     * 根据Criteria查询符合条件的信息
     * @param clazz 类名称
     * @param criteria Criteria对象
     * @return
     */
    PagingList<M> listall(Class<M> clazz, Criteria criteria);
}
